# ==============================
# _*_ coding:utf-8 _*_
# _*_ by:zizle     _*_
# _*_ at:20230423  _*_
# ==============================
import sys

import pymysql
from pymysql.converters import conversions
from pymysql.constants import FIELD_TYPE
from dbutils.pooled_db import PooledDB  # dbutils里的模块
from redis import ConnectionPool
from settings import BASE_DATABASE, INDEX_DATABASE, DEPARTMENT_WORK_DATABASE, REDIS_DATABASE


def get_converters():
    conversions[FIELD_TYPE.BIT] = lambda x: True if int.from_bytes(x, byteorder=sys.byteorder, signed=False) else False
    conversions[FIELD_TYPE.DECIMAL] = float
    conversions[FIELD_TYPE.NEWDECIMAL] = float
    conversions[FIELD_TYPE.DATE] = str
    conversions[FIELD_TYPE.DATETIME] = str
    return conversions


base_db_pool = PooledDB(
    creator=pymysql,  # 使用链接数据库的模块
    maxconnections=20,  # 连接池允许的最大连接数，0和None表示不限制连接数
    mincached=1,  # 初始化时，链接池中至少创建的空闲的链接，0表示不创建
    blocking=True,  # 连接池中如果没有可用连接后，是否阻塞等待。True，等待；False，不等待然后报错
    # ping MySQL服务端，检查是否服务可用。
    # 如：0 = None = never,
    # 1 = default = whenever it is requested,
    # 2 = when a cursor is created,
    # 4 = when a query is executed,
    # 7 = always
    ping=1,
    conv=get_converters(),
    **BASE_DATABASE
)

index_db_pool = PooledDB(
    creator=pymysql,  # 使用链接数据库的模块
    maxconnections=20,  # 连接池允许的最大连接数，0和None表示不限制连接数
    mincached=1,  # 初始化时，链接池中至少创建的空闲的链接，0表示不创建
    blocking=True,  # 连接池中如果没有可用连接后，是否阻塞等待。True，等待；False，不等待然后报错
    ping=1,
    conv=get_converters(),
    **INDEX_DATABASE
)

department_db_pool = PooledDB(
    creator=pymysql,
    maxconnections=10,
    mincached=1,
    blocking=True,
    ping=1,
    conv=get_converters(),
    **DEPARTMENT_WORK_DATABASE
)

redis_pool = ConnectionPool(decode_responses=True, **REDIS_DATABASE)  # redis连接池
